﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HomeCare.Model;
using HomeCare.Control;
using System.Collections;

namespace HomeCare.View {

    public partial class CadFuncionario : Form {
        int id;
        private String acao = String.Empty;

        public CadFuncionario() {
            InitializeComponent();
        }

        private void CadFuncionario_Load(object sender, EventArgs e) {
            BloquearCampos();
            BloquearBotoes();
            BloquearBotoesComando();
            LimparCampos();

            //Preenche combobox Sexo
            ArrayList list = new ArrayList();
            list.Add(new Item(String.Empty, String.Empty));
            list.Add(new Item("F", "Feminino"));
            list.Add(new Item("M", "Masculino"));
            cbxSexo.DataSource = list;
            cbxSexo.ValueMember = "itemValue";
            cbxSexo.DisplayMember = "displayValue";

            //Preenche combobox Estado
            Estado estado = new Estado();
            EstadoControl estadoControl = new EstadoControl();
            DataSet dtsEstados = estadoControl.ConsultaEstado(estado);
            cbxEstado.DataSource = dtsEstados.Tables[0];
            cbxEstado.DisplayMember = dtsEstados.Tables[0].Columns["Sigla"].ToString();
            cbxEstado.ValueMember = dtsEstados.Tables[0].Columns["ID"].ToString();
            cbxEstado.SelectedIndex = -1;

            //Preenche listbox Especialidades
            Especialidade especialidade = new Especialidade();
            EspecialidadeControl especialidadeControl = new EspecialidadeControl();
            DataSet dtsEspecialidades = especialidadeControl.ConsultaEspecialidade(especialidade);
            lbxEspecialidadesDisponiveis.DataSource = dtsEspecialidades.Tables[0];
            lbxEspecialidadesDisponiveis.DisplayMember = dtsEspecialidades.Tables[0].Columns["Especialidade"].ToString();
            lbxEspecialidadesDisponiveis.ValueMember = dtsEspecialidades.Tables[0].Columns["ID"].ToString();
            lbxEspecialidadesDisponiveis.SelectedIndex = -1;

            //Verifica Acesso aos botoes
            Pessoa pessoaEstatica = new Pessoa();
            pessoaEstatica.id = PessoaEstatica.ID;
            Tela tela = new Tela();
            tela.id = 4;
            tela.descricao = this.Name;
            VerificaAcesso(pessoaEstatica, tela);
        }

        private void cbxEstado_SelectedIndexChanged(object sender, EventArgs e) {
            //Preenche combobox Cidade
            Cidade cidade = new Cidade();
            if (cbxEstado.SelectedIndex != -1 && cbxEstado.SelectedIndex != 0)
                cidade.estado.id = (Int32)cbxEstado.SelectedValue;
            else
                cidade.estado.id = 0;
            CidadeControl cidadeControl = new CidadeControl();
            DataSet dtsCidades = cidadeControl.ConsultarCidade(cidade);
            cbxCidade.DataSource = dtsCidades.Tables[0];
            cbxCidade.DisplayMember = dtsCidades.Tables[0].Columns["Cidade"].ToString();
            cbxCidade.ValueMember = dtsCidades.Tables[0].Columns["Cidade_ID"].ToString();
            cbxCidade.SelectedIndex = -1;
        }

        private void btnIncluir_Click(object sender, EventArgs e) {
            DesbloquearCampos();
            DesbloquearBotoes();
            BloquearBotoesComando();
            btnIncluir.Enabled = true;
            acao = "Incluir";
        }

        private void btnAlterar_Click(object sender, EventArgs e) {
            DesbloquearCampos();
            DesbloquearBotoes();
            BloquearBotoesComando();
            btnAlterar.Enabled = true;
            ConFuncionario conFuncionario = new ConFuncionario(this);
            conFuncionario.Show();
            acao = "Alterar";
        }

        private void btnExcluir_Click(object sender, EventArgs e) {
            DesbloquearCampos();
            DesbloquearBotoes();
            BloquearBotoesComando();
            btnExcluir.Enabled = true;
            acao = "Excluir";
            ConFuncionario consultaPessoa = new ConFuncionario(this);
            consultaPessoa.Show();
        }

        private void btnConsultar_Click(object sender, EventArgs e) {
            BloquearBotoesComando();
            DesbloquearBotoes();
            btnConsultar.Enabled = true;
            acao = "Consultar";
            ConFuncionario consultaPessoa = new ConFuncionario(this);
            consultaPessoa.Show();
        }

        private void btnConfirmar_Click(object sender, EventArgs e) {
            PessoaControl pessoaControl = new PessoaControl();
            Pessoa pessoa = new Pessoa();
            pessoa.id = id;
            pessoa.nome = tbxNome.Text;
            if (cbxSexo.SelectedIndex == -1)
                pessoa.sexo = "";
            else
                pessoa.sexo = cbxSexo.SelectedValue.ToString();

            if (cbxProfissao.SelectedIndex == -1)
                pessoa.profissao = "";
            else
                pessoa.profissao = cbxProfissao.SelectedValue.ToString();

            pessoa.dtNasc = dtpDtNasc.Value;
            pessoa.dtCad = dtpDtCad.Value;

            if (mbxCPF.MaskFull == true) {
                pessoa.cpf = mbxCPF.Text;
            }
            else pessoa.cpf = String.Empty;
            pessoa.rg = tbxRG.Text;
            pessoa.observacoes = tbxObservacoes.Text;

            if (mbxTelCel.MaskFull == true) {
                pessoa.telefoneCel.ddd = mbxTelCel.Text.Substring(1, 2);
                pessoa.telefoneCel.numero = mbxTelCel.Text.Substring(4, 10);
                pessoa.telefoneCel.tipoTelefone = "Celular";
            }

            if (mbxTelCom.MaskFull == true) {
                pessoa.telefoneCom.ddd = mbxTelCom.Text.Substring(1, 2);
                pessoa.telefoneCom.numero = mbxTelCom.Text.Substring(4, 10);
                pessoa.telefoneCom.tipoTelefone = "Comercial";
            }

            if (mbxTelRes.MaskFull == true) {
                pessoa.telefoneRes.ddd = mbxTelRes.Text.Substring(1, 2);
                pessoa.telefoneRes.numero = mbxTelRes.Text.Substring(4, 10);
                pessoa.telefoneRes.tipoTelefone = "Residencial";
            }

            pessoa.enderecoRes.tipoEndereco = "Residencial";
            if (cbxEstado.SelectedValue != null)
                pessoa.enderecoRes.estados_ID = Int32.Parse(cbxEstado.SelectedValue.ToString());
            else pessoa.enderecoRes.estados_ID = -1;
            if (cbxCidade.SelectedValue != null)
                pessoa.enderecoRes.cidades_ID = Int32.Parse(cbxCidade.SelectedValue.ToString());
            else
                pessoa.enderecoRes.cidades_ID = -1;
            pessoa.enderecoRes.bairro = tbxBairro.Text;
            pessoa.enderecoRes.rua = tbxRua.Text;
            if (tbxNumero.Text != String.Empty)
                pessoa.enderecoRes.numero = Int32.Parse(tbxNumero.Text);
            else
                pessoa.enderecoRes.numero = 0;
            pessoa.enderecoRes.complemento = tbxComplemento.Text;

            pessoa.email = tbxEmail.Text;
            pessoa.login = tbxUsuario.Text;
            pessoa.senha = tbxSenha.Text;

            string msg = pessoaControl.ValidaPessoa(pessoa);
            if (String.IsNullOrEmpty(msg)) {
                switch (acao) {
                    case "Incluir":
                    bool retorno = pessoaControl.InserePessoa(pessoa);
                    if (retorno) {
                        MessageBox.Show("Funcionário inserido com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        LimparCampos();
                    }
                    else {
                        MessageBox.Show("Erro ao inserir o Funcionário", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    break;
                    case "Alterar":
                    bool retorno2 = pessoaControl.AlteraPessoa(pessoa);
                    if (retorno2) {
                        MessageBox.Show("Funcionário alterado com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        LimparCampos();
                    }
                    else {
                        MessageBox.Show("Erro ao alterar o Funcionário", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    break;

                    case "Excluir":
                    bool retorno3 = pessoaControl.ExcluiPessoa(pessoa);
                    if (retorno3) {
                        MessageBox.Show("Funcionário excluido com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        LimparCampos();
                    }
                    else {
                        MessageBox.Show("Erro ao excluir o Funcionário", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    break;
                }

                BloquearCampos();
                BloquearBotoes();
                LimparCampos();

                //Verifica Acesso aos botoes
                Pessoa pessoaEstatica = new Pessoa();
                pessoaEstatica.id = 1;
                Tela tela = new Tela();
                tela.id = 4;
                tela.descricao = this.Name;
                VerificaAcesso(pessoaEstatica, tela);
            }
            else
                MessageBox.Show(msg, "Erro de validação", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void btnCancelar_Click(object sender, EventArgs e) {

            BloquearCampos();
            BloquearBotoes();
            LimparCampos();

            //Verifica Acesso aos botoes
            Pessoa pessoaEstatica = new Pessoa();
            pessoaEstatica.id = 1;
            Tela tela = new Tela();
            tela.id = 4;
            tela.descricao = this.Name;
            VerificaAcesso(pessoaEstatica, tela);
        }

        private void DesbloquearCampos() {
            tbxNome.Enabled = true;
            cbxSexo.Enabled = true;
            cbxProfissao.Enabled = true;
            dtpDtNasc.Enabled = true;
            dtpDtCad.Enabled = true;
            mbxCPF.Enabled = true;
            tbxRG.Enabled = true;
            tbxObservacoes.Enabled = true;
            cbxEstado.Enabled = true;
            cbxCidade.Enabled = true;
            tbxBairro.Enabled = true;
            tbxRua.Enabled = true;
            tbxNumero.Enabled = true;
            tbxComplemento.Enabled = true;
            mbxTelRes.Enabled = true;
            mbxTelCom.Enabled = true;
            mbxTelCel.Enabled = true;
            tbxEmail.Enabled = true;
            lbxEspecialidadesDisponiveis.Enabled = true;
            lbxEspecialidadesEscolhidas.Enabled = true;
            tbxUsuario.Enabled = true;
            tbxSenha.Enabled = true;
        }

        private void BloquearCampos() {
            tbxNome.Enabled = false;
            cbxSexo.Enabled = false;
            cbxProfissao.Enabled = false;
            dtpDtNasc.Enabled = false;
            dtpDtCad.Enabled = false;
            mbxCPF.Enabled = false;
            tbxRG.Enabled = false;
            tbxObservacoes.Enabled = false;
            cbxEstado.Enabled = false;
            cbxCidade.Enabled = false;
            tbxBairro.Enabled = false;
            tbxRua.Enabled = false;
            tbxNumero.Enabled = false;
            tbxComplemento.Enabled = false;
            mbxTelRes.Enabled = false;
            mbxTelCom.Enabled = false;
            mbxTelCel.Enabled = false;
            tbxEmail.Enabled = false;
            lbxEspecialidadesDisponiveis.Enabled = false;
            lbxEspecialidadesEscolhidas.Enabled = false;
            tbxUsuario.Enabled = false;
            tbxSenha.Enabled = false;
        }

        private void LimparCampos() {
            tbxNome.Text = String.Empty;
            cbxSexo.SelectedIndex = -1;
            dtpDtNasc.Text = DateTime.Today.ToString();
            mbxCPF.Text = String.Empty;
            tbxRG.Text = String.Empty;
            mbxTelRes.Text = String.Empty;
            mbxTelCom.Text = String.Empty;
            mbxTelCel.Text = String.Empty;
            tbxObservacoes.Text = String.Empty;
            cbxEstado.SelectedIndex = -1;
            cbxCidade.SelectedIndex = -1;
            tbxBairro.Text = String.Empty;
            tbxRua.Text = String.Empty;
            tbxNumero.Text = String.Empty;
            tbxComplemento.Text = String.Empty;
            tbxEmail.Text = String.Empty;
            tbxUsuario.Text = String.Empty;
            tbxSenha.Text = String.Empty;
            //lbxEspecialidadesDisponiveis.DataSource = null;
            //lbxEspecialidadesEscolhidas.DataSource = null;
        }

        private void BloquearBotoes() {
            btnCancelar.Enabled = false;
            btnConfirmar.Enabled = false;
            btnAdicionar.Enabled = false;
            btnRemover.Enabled = false;
        }

        private void DesbloquearBotoes() {
            btnCancelar.Enabled = true;
            btnConfirmar.Enabled = true;
            btnAdicionar.Enabled = true;
            btnRemover.Enabled = true;
        }

        private void BloquearBotoesComando() {
            btnIncluir.Enabled = false;
            btnAlterar.Enabled = false;
            btnExcluir.Enabled = false;
            btnConsultar.Enabled = false;
        }

        private void DesbloquearBotoesComando() {
            btnIncluir.Enabled = true;
            btnAlterar.Enabled = true;
            btnExcluir.Enabled = true;
            btnConsultar.Enabled = true;
        }

        private void VerificaAcesso(Pessoa pessoa, Tela tela) {
            AcessoControl acessoControl = new AcessoControl();
            DataSet acessoUsuario = acessoControl.VerificaAcesso(pessoa, tela);
            foreach (DataRow row in acessoUsuario.Tables[0].Rows) {
                if (row["Inclusao"].ToString() == "S")
                    btnIncluir.Enabled = true;
                if (row["Alteracao"].ToString() == "S")
                    btnAlterar.Enabled = true;
                if (row["Exclusao"].ToString() == "S")
                    btnExcluir.Enabled = true;
                if (row["Consulta"].ToString() == "S")
                    btnConsultar.Enabled = true;
            }
        }

        public void RecebePessoa(Pessoa pessoa) {
            id = pessoa.id;
            tbxNome.Text = pessoa.nome;
            //tbxDescricao.Text = pessoa.descricao;

        }

        private void btnAdicionar_Click(object sender, EventArgs e) {
            Item item = new Item(lbxEspecialidadesDisponiveis.SelectedValue.ToString(), lbxEspecialidadesDisponiveis.Text);
            lbxEspecialidadesDisponiveis.Items.Remove(item.itemValue);
            //lbxEspecialidadesEscolhidas.Items.Add(lbxEspecialidadesDisponiveis.SelectedItem);
            lbxEspecialidadesEscolhidas.Items.Add(item);
            lbxEspecialidadesEscolhidas.ValueMember = "itemValue";
            lbxEspecialidadesEscolhidas.DisplayMember = "displayValue";

        }
    }
}
